import { createStore } from 'vuex'
import { authAPI } from '../api/api'

export default createStore({
  state: {
    // 用户信息
    userInfo: JSON.parse(localStorage.getItem('userInfo') || '{}'),
    // 侧边栏折叠状态
    sidebarCollapsed: false,
    // 当前激活的菜单
    activeMenu: ''
  },
  getters: {
    // 用户是否已登录
    isLogin: state => !!state.userInfo.token,
    // 用户角色
    userRole: state => state.userInfo.role || '',
    // 用户名
    username: state => state.userInfo.username || '',
    // 用户真实姓名
    realName: state => state.userInfo.realName || '',
    // 侧边栏折叠状态
    sidebarCollapsed: state => state.sidebarCollapsed
  },
  mutations: {
    // 设置用户信息
    SET_USER_INFO(state, userInfo) {
      state.userInfo = userInfo
      localStorage.setItem('userInfo', JSON.stringify(userInfo))
    },
    // 单独设置用户角色
    SET_USER_ROLE(state, role) {
      if (state.userInfo) {
        state.userInfo.role = role
        localStorage.setItem('userInfo', JSON.stringify(state.userInfo))
      }
    },
    // 清除用户信息
    CLEAR_USER_INFO(state) {
      state.userInfo = {}
      localStorage.removeItem('userInfo')
    },
    // 切换侧边栏折叠状态
    TOGGLE_SIDEBAR(state) {
      state.sidebarCollapsed = !state.sidebarCollapsed
    },
    // 设置激活菜单
    SET_ACTIVE_MENU(state, menu) {
      state.activeMenu = menu
    }
  },
  actions: {
    // 用户登录
    login({ commit }, userInfo) {
      const { username, password, role } = userInfo
      return new Promise((resolve, reject) => {
        // 调用登录API
        authAPI.login(username, password)
          .then(response => {
            if (response.code === 200 && response.success) {
              // 确保响应数据包含用户角色，这里需要添加role
              const userData = {
                ...response.data,
                role: role // 使用前端选择的角色，因为后端响应可能没有包含role或格式不一致
              };
              commit('SET_USER_INFO', userData);
              resolve(userData);
            } else {
              reject(response.message || '登录失败');
            }
          })
          .catch(error => {
            console.error('登录失败:', error);
            const errorMessage = error.response?.data?.message || '登录失败，请检查网络连接';
            reject(errorMessage);
          });
      });
    },
    // 用户注销
    logout({ commit }) {
      return new Promise((resolve, reject) => {
        // 调用真实的注销API
        authAPI.logout()
          .then(() => {
            commit('CLEAR_USER_INFO')
            resolve()
          })
          .catch(error => {
            // 即使API调用失败也清除本地用户信息
            commit('CLEAR_USER_INFO')
            reject(error)
          })
      })
    }
  },
  modules: {
    // 实际项目中可以根据需要拆分模块
  }
}) 